
/**
 * 数需要多少种颜色
 * n行 m列  假定n > m 
 */
function countColors(n, m) {

    //1.如果是1的情况
    if (n == 1 && m == 1) {
        return 1;
    }
    let fac_n = [];
    let fac_m = [];//动态加载的数组

    //2.计算2~n/m开方的整数数组 n/m的因数数组
    for (let i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            fac_n.push(i);
            while (n % i == 0) n /= i;
        }
    }
    if (n > 1) fac_n.push(n);
    
    for (let i = 2; i * i <= m; i++) {
        if (m % i == 0) {
            fac_m.push(i);
            while (m % i == 0) m /= i;
        }
    }
    if (m > 1) fac_m.push(m);

    //3.求最小值
    fac_n.sort((a,b)=>a-b);
    fac_m.sort((a,b)=>a-b);

    let Min = 1e9;
    if (fac_n != null) Min = Min < fac_n[0]? Min:fac_n[0];
    if (fac_m != null) Min = Min < fac_m[0]? Min:fac_m[0];
    return Min;
}

console.log(countColors(2, 2));
console.log(countColors(3, 3));
console.log(countColors(7, 9));
console.log(countColors(4, 4));